home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer: Getting Started / Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin / pc / mac / bonus / peter_le / macbinar / myapplee.uni < prev    next >
Text File  |  1992-08-04  |  4KB  |  127 lines

  1. unit MyAppleEvents;
  2.  
  3. interface
  4.  
  5.     function InitAppleEvents (DoOApp, DoODoc, DoPrint, DoQuit: Ptr): OSErr;
  6. { function DoOApp: OSErr }
  7. { function DoODoc (fs: FSSpec): OSErr }
  8. { function DoPrint (fs: FSSpec): OSErr }
  9. { function DoQuit: OSErr}
  10.  
  11. implementation
  12.  
  13.     uses
  14.         AppleTalk, PPCToolbox, Processes, EPPC, Notification, AppleEvents;
  15.  
  16.     function DoOApp (p: ptr): OSErr;
  17.     inline
  18.         $205F, $4E90;
  19.  
  20.     function DoDocs (fs: FSSpec; p: ptr): OSErr;
  21.     inline
  22.         $205F, $4E90;
  23.  
  24.     function DoQuit (p: ptr): OSErr;
  25.     inline
  26.         $205F, $4E90;
  27.  
  28.     const
  29.         kPatienceLevel = 1000;                                { <aevt> ticks we wait for response }
  30.         kSysEnvironsVersion = 1;
  31.         kOSEvent = app4Evt;    {event used by MultiFinder}
  32.         kSuspendResumeMessage = 1;        {high byte of suspend/resume event message}
  33.         kResumeMask = 1;        {bit of message field for resume vs. suspend}
  34.         kMouseMovedMessage = $FA;        {high byte of mouse-moved event message}
  35.         kNoEvents = 0;        {no events mask}
  36.         kNoListChosen = -1;
  37.  
  38.     function GotRequiredParams (theAppleEvent: AppleEvent): OSErr;        { <aevt> }
  39.         var
  40.             typeCode: DescType;
  41.             actualSize: Size;
  42.             err: OSErr;
  43.     begin
  44.         err := AEGetAttributePtr(theAppleEvent, keyMissedKeywordAttr, typeWildCard, typeCode, nil, 0, actualSize);    { nil ok: need only function result }
  45.         if err = errAEDescNotFound then        { we got all the required params: all is ok }
  46.             GotRequiredParams := noErr
  47.         else if err = noErr then
  48.             GotRequiredParams := errAEEventNotHandled
  49.         else
  50.             GotRequiredParams := err;
  51.     end; { GotRequiredParams }
  52.  
  53.     function HandleOAPP (theAppleEvent, reply: AppleEvent; openappp: ptr): OSErr;{ <aevt> }
  54.         var
  55.             oe: OSErr;
  56.     begin
  57.     { We don't expect any params at all, but check in case the client requires any }
  58.         oe := GotRequiredParams(theAppleEvent);
  59.         oe := DoOApp(openappp);
  60.         HandleOAPP := oe;
  61.     end;
  62.  
  63.     function HandleDocs (theAppleEvent, reply: AppleEvent; dodocp: ptr): OSErr;        { <aevt> }
  64.         var
  65.             myFSS: FSSpec;
  66.             docList: AEDescList;
  67.             index, itemsInList: LONGINT;
  68.             actualSize: Size;
  69.             keywd: AEKeyword;
  70.             typeCode: descType;
  71.             ignoreWPtr: WindowPtr;
  72.             oe, ooe: OSErr;
  73.     begin
  74.         oe := AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, docList);
  75.         if oe = noErr then begin
  76.             ooe := GotRequiredParams(theAppleEvent);
  77.     { now get each alias from the list (as an FSSSpec) and open the associated file. }
  78.             oe := AECountItems(docList, itemsInList);
  79.             for index := 1 to itemsInList do begin
  80.                 ooe := AEGetNthPtr(docList, index, typeFSS, keywd, typeCode, @myFSS, sizeof(myFSS), actualSize);
  81. { coercion does alias->fsspec }
  82.                 if ooe = noErr then
  83.                     ooe := DoDocs(myFSS, dodocp);
  84.             end;
  85.             ooe := AEDisposeDesc(docList);
  86.         end;
  87.         HandleDocs := oe;
  88.     end; { HandleDocs }
  89.  
  90.     function HandleQUIT (theAppleEvent, reply: AppleEvent; quitp: ptr): OSErr;        { <aevt> }
  91.         var
  92.             oe: OSErr;
  93.             errStr: Str255;
  94.             willQuit: Boolean;                { did the user allow the quit or cancel }
  95.     begin
  96.     { We don't expect any params at all, but check in case the client requires any }
  97.         oe := GotRequiredParams(theAppleEvent);
  98.         oe := DoQuit(quitp);            { set global boolean: app will exit at end of event loop }
  99.         if reply.dataHandle <> nil then            { a reply is sought }
  100.             begin
  101.             if oe = noErr then
  102.                 errStr := 'OK'
  103.             else
  104.                 errStr := 'user cancelled quit';
  105.             oe := AEPutParamPtr(reply, 'errs', 'TEXT', Ptr(@errStr[1]), length(errStr));
  106.         end;
  107.         HandleQUIT := oe;
  108.     end;
  109.  
  110. {$S Init}
  111.     function InitAppleEvents (DoOApp, DoODoc, DoPrint, DoQuit: Ptr): OSErr;
  112.         var
  113.             aevtErr: OSErr;
  114.     begin
  115.         aevtErr := noErr;
  116.         if (aevtErr = noErr) and (DoOApp <> nil) then
  117.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, @HandleOAPP, longInt(DoOApp), false);
  118.         if (aevtErr = noErr) and (DoODoc <> nil) then
  119.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, @HandleDocs, longInt(DoODoc), false);
  120.         if (aevtErr = noErr) and (DoPrint <> nil) then
  121.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments, @HandleDocs, longInt(DoPrint), false);
  122.         if (aevtErr = noErr) and (DoQuit <> nil) then
  123.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, @HandleQUIT, longInt(DoQuit), false);
  124.         InitAppleEvents := aevtErr;
  125.     end;
  126.  
  127. end.